package com.boot.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.boot.entity.*;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Mapper
public interface UserDao  extends BaseMapper<User> {

	/**用户注册
	 * @param admin
	 * @return
	 */
	public int save (User admin);

	/**通过手机号查找用户
	 * @param phone
	 * @return
	 */
	public User findByPhone(String phone);
	
	/**登陆
	 * @param params
	 * @return
	 */
	public User login(HashMap<String, Object> params);
	
	/**通过用户id获取用户的详细信息
	 * @param id
	 * @return
	 */
	public User getUserInfo(HashMap<String, String> map);
	/**获取用户的余额
	 * @param id
	 * @return
	 */
	public User getBalance(String id);
	/**修改个人信息
	 * @param user
	 * @return
	 */
	public int update(User user);
	
	/**
	 * 修改个人信息不带头像
	 * @param user
	 * @return
	 */
	public int updatenoicon(User user);
	/**获取用户自己发布的广告
	 * @param params
	 * @return
	 */
	public List<Ad> getMyAds(Map<String,Object> params);
	/**删除某条广告
	 * @param id
	 * @return
	 */
	public int deleteAd(String ad_id);
	
	/**保存用户的位置信息
	 * @param userLocation
	 * @return 返回一个int值如果大于零则表示保存成功
	 */
	public int saveUserLocation(UserLocation userLocation);
	
	/**
	 * 获取用户注册时需要选择的行业或职业
	 * @return
	 */
	public List<Job> getJobCode();
	
	/**
	 * 修该用户自己定义的广告顺序
	 * @param id
	 * @return
	 */
	public int updateMyType(User user); 
	
	/**
	 * 获取自己定义的广告顺序
	 * @param id
	 * @return
	 */
	public List<User> getMyType(String id);

	/**
	 * 取出所有用户
	 * @return
	 */
	public List<User>  findAllLocations();
	
	/**
	 * 获取当前位置的周边用户
	 * @return
	 */
	public List<User> findAllArountLocations();

	/**
	 * 置顶当前广告
	 * @param id
	 * @return
	 */
	public int pushAdTop(String ad_id);

	/**
	 * 长连接注册用户之后，用户手机号注册（根据用户的username修改用户的信息）
	 * @param addUser
	 * @return
	 */
	public int saveUser(User addUser);

	/**
	 * 通过手机号获取用户详细信息
	 * @param phone
	 * @return
	 */
	public User getUserInfoByPhone(String phone);
	
	/**
	 * 删除之前老的登录记录
	 * @param username
	 * @return
	 */
	public int deleteOldLoginRecord(String username);

	/**
	 * 将老的用户信息保存到新的连接账号记录中
	 * @param user
	 */
	public void saveOldLoginRecord(User user);
	
	/**
	 * 根据经纬度及基本条件筛选用户
	 * @param ad
	 * @return
	 */
	public List<User> getUsersBylocationArg(Ad ad);
	
	/**
	 * 根据区域级基本条件筛选用户
	 * @param ad
	 * @return
	 */
	public List<User> getUsersByAreaArg(Ad ad);

	/**
	 * 当某个用户查看某条广告后，则获得了奖励，则修改用户的余额
	 * @param user
	 */
	public void updateUserBalance(User user);

	/**
	 * 余额支付
	 * @param user
	 * @return
	 */
	public int doPayByBalance(User user);

	/**
	 * 保持账号一致性
	 * @param user
	 * @return
	 */
	public int keepUserSame(User user);

	/**
	 * 通过username
	 * 获取用户
	 * @param username
	 * @return
	 */
	public User getUserByUsername(String username);

	/**
	 * 通过id删除用户
	 * @param id
	 */
	public void deleteUserById(Integer id);

	/**
	 * 将其他设备的账号的username和password设置到新设备新创键的账号上
	 * @param long_user
	 */
	public int exchangeUserData(User long_user);

	/**
	 * 将用户创建状态设置成0
	 * @param id
	 */
	public void updateUserCreate(Integer id);
	
	/**
	 * 锁定用户
	 * @param user
	 * @return
	 */
	public int lockUserPay(User user);


	/**
	 * 保存支付密码
	 * @param user
	 * @return
	 */
	public int savePayPassword(User user);
	
	/**
	 * 用户充值
	 * @param user
	 * @return
	 */
	public int rechargeUserBalance(User user);

	/**
	 * 保存用户支付宝账户
	 * @param user
	 */
	public void saveUserAliPay(User user);
	
	
	/**
	 * 获取某个用户的所有推送的广告
	 * @param username
	 * @return
	 */
	public List<Push> getAllMyPushAds(HashMap<String,Object> map);
	
	/**
	 * 获取雷区
	 * @return
	 */
	public List<Ad> getBomb();
	
	/**
	 * 绑定用户长连接账号
	 * @param user
	 * @return
	 */
	public int bundleUsername(User user);
	
	/**
	 * 保存用户长连接账号
	 * @param user
	 * @return
	 */
	public int saveUsername(User user);

	/**
	 * 删除某个临时创建的长连接账号
	 * @param user_id
	 */
	public int deleteUser(String user_id);

	/**
	 * 增加用户未读广告数量
	 * @param user_id
	 */
	public int plusUnReadAds(String user_id);
	
	/**
	 * 获取用户未读数量
	 * @param user_id
	 * @return
	 */
	public User getUnReadedAds(String username);

	/**
	 * 获取总收获金额
	 * @param user_accept_id
	 * @return
	 */
	public User getTotalAward(String user_id);
	
	/**
	 * 获取所有被我关注的人
	 * @param user_id
	 * @return
	 */
	public List<Concern> getMyConcern(HashMap<String, Object> map);
	
	/**
	 * 获取某个人的第一条广告记录
	 * @param user_id
	 * @return
	 */
	public Ad getFirstAdByUserId(String user_id);

	/**
	 * 获取我的收藏
	 * @param map
	 * @return
	 */
	public ArrayList<CollectionAd> getMyCollection(HashMap<String, Object> map);
	
	/**
	 * 反馈
	 * @param feed
	 * @return
	 */
	public int feedBack(Feed feed);

	/**
	 * 修改用户的token
	 * @param user
	 * @return
	 */
	public int updateToken(User user);
	
}
